// using System.Collections.Generic;
// using UnityEngine;
// using UnityEngine.UI;
// using GGameFramework.Core.FSM;
//
// namespace GGameFramework.Examples.FSM
// {
//     /// <summary>
//     /// 状态机测试管理器
//     /// 展示如何在实际场景中使用状态机系统
//     /// </summary>
//     public class FSMTestManager : MonoBehaviour
//     {
//         [Header("UI引用")]
//         [SerializeField] private Text m_CurrentStateText;
//         [SerializeField] private Text m_StateTimeText;
//         [SerializeField] private Text m_HealthText;
//         [SerializeField] private Text m_InputStatusText;
//         [SerializeField] private Text m_TransitionLogText;
//         [SerializeField] private Button m_TestDamageButton;
//         [SerializeField] private Button m_TestHealButton;
//         [SerializeField] private Button m_TestKillButton;
//         [SerializeField] private Button m_ShowConfigButton;
//         
//         [Header("测试设置")]
//         [SerializeField] private bool m_ShowDetailedLogs = true;
//         [SerializeField] private int m_MaxLogEntries = 20;
//         
//         private PlayerController m_Player;
//         private PlayerFSMConfiguration m_FsmConfig;
//         private List<string> m_TransitionLog;
//         private ScrollRect m_LogScrollRect;
//         
//         private void Start()
//         {
//             InitializeUI();
//             InitializeFSMTest();
//             SetupEventListeners();
//         }
//         
//         private void Update()
//         {
//             UpdateUI();
//         }
//         
//         /// <summary>
//         /// 初始化UI
//         /// </summary>
//         private void InitializeUI()
//         {
//             m_TransitionLog = new List<string>();
//             
//             // 查找UI组件
//             if (m_CurrentStateText == null)
//                 m_CurrentStateText = GameObject.Find("CurrentStateText")?.GetComponent<Text>();
//             
//             if (m_StateTimeText == null)
//                 m_StateTimeText = GameObject.Find("StateTimeText")?.GetComponent<Text>();
//             
//             if (m_HealthText == null)
//                 m_HealthText = GameObject.Find("HealthText")?.GetComponent<Text>();
//             
//             if (m_InputStatusText == null)
//                 m_InputStatusText = GameObject.Find("InputStatusText")?.GetComponent<Text>();
//             
//             if (m_TransitionLogText == null)
//                 m_TransitionLogText = GameObject.Find("TransitionLogText")?.GetComponent<Text>();
//             
//             if (m_TestDamageButton == null)
//                 m_TestDamageButton = GameObject.Find("TestDamageButton")?.GetComponent<Button>();
//             
//             if (m_TestHealButton == null)
//                 m_TestHealButton = GameObject.Find("TestHealButton")?.GetComponent<Button>();
//             
//             if (m_TestKillButton == null)
//                 m_TestKillButton = GameObject.Find("TestKillButton")?.GetComponent<Button>();
//             
//             if (m_ShowConfigButton == null)
//                 m_ShowConfigButton = GameObject.Find("ShowConfigButton")?.GetComponent<Button>();
//             
//             // 查找日志滚动视图
//             m_LogScrollRect = GameObject.Find("LogScrollRect")?.GetComponent<ScrollRect>();
//         }
//         
//         /// <summary>
//         /// 初始化状态机测试
//         /// </summary>
//         private void InitializeFSMTest()
//         {
//             // 查找玩家
//             m_Player = FindObjectOfType<PlayerController>();
//             if (m_Player == null)
//             {
//                 Debug.LogError("未找到PlayerController，请确保场景中有玩家对象");
//                 return;
//             }
//             
//             // 创建状态机配置
//             m_FsmConfig = new PlayerFSMConfiguration();
//             
//             // 等待玩家状态机初始化完成
//             StartCoroutine(WaitForPlayerFSM());
//         }
//         
//         /// <summary>
//         /// 等待玩家状态机初始化完成
//         /// </summary>
//         private System.Collections.IEnumerator WaitForPlayerFSM()
//         {
//             yield return new WaitForSeconds(0.1f);
//             
//             if (m_Player != null)
//             {
//                 Debug.Log("玩家状态机测试环境初始化完成");
//                 LogTransition("系统", "测试环境初始化完成");
//             }
//         }
//         
//         /// <summary>
//         /// 设置事件监听器
//         /// </summary>
//         private void SetupEventListeners()
//         {
//             if (m_TestDamageButton != null)
//                 m_TestDamageButton.onClick.AddListener(TestDamage);
//             
//             if (m_TestHealButton != null)
//                 m_TestHealButton.onClick.AddListener(TestHeal);
//             
//             if (m_TestKillButton != null)
//                 m_TestKillButton.onClick.AddListener(TestKill);
//             
//             if (m_ShowConfigButton != null)
//                 m_ShowConfigButton.onClick.AddListener(ShowFSMConfiguration);
//         }
//         
//         /// <summary>
//         /// 更新UI显示
//         /// </summary>
//         private void UpdateUI()
//         {
//             if (m_Player == null) return;
//             
//             // 更新当前状态显示
//             if (m_CurrentStateText != null)
//             {
//                 var fsm = m_Player.GetComponent<PlayerController>()?.GetComponent<IFsm<PlayerController>>();
//                 if (fsm != null)
//                 {
//                     m_CurrentStateText.text = $"当前状态: {fsm.CurrentState?.GetStateName() ?? "未知"}";
//                 }
//             }
//             
//             // 更新状态时间显示
//             if (m_StateTimeText != null)
//             {
//                 var fsm = m_Player.GetComponent<PlayerController>()?.GetComponent<IFsm<PlayerController>>();
//                 if (fsm != null)
//                 {
//                     m_StateTimeText.text = $"状态持续时间: {fsm.CurrentStateTime:F2}s";
//                 }
//             }
//             
//             // 更新生命值显示
//             if (m_HealthText != null)
//             {
//                 m_HealthText.text = $"生命值: {m_Player.GetCurrentHealth()}/{m_Player.GetMaxHealth()}";
//             }
//             
//             // 更新输入状态显示
//             if (m_InputStatusText != null)
//             {
//                 string inputStatus = GetInputStatus();
//                 m_InputStatusText.text = $"输入状态: {inputStatus}";
//             }
//             
//             // 更新转换日志显示
//             if (m_TransitionLogText != null)
//             {
//                 m_TransitionLogText.text = string.Join("\n", m_TransitionLog);
//             }
//         }
//         
//         /// <summary>
//         /// 获取输入状态
//         /// </summary>
//         private string GetInputStatus()
//         {
//             string status = "";
//             
//             if (Input.GetAxis("Horizontal") != 0 || Input.GetAxis("Vertical") != 0)
//                 status += "移动 ";
//             
//             if (Input.GetKey(KeyCode.Space))
//                 status += "跳跃 ";
//             
//             if (Input.GetMouseButton(0))
//                 status += "攻击 ";
//             
//             if (status == "")
//                 status = "无";
//             
//             return status.Trim();
//         }
//         
//         /// <summary>
//         /// 测试伤害功能
//         /// </summary>
//         private void TestDamage()
//         {
//             if (m_Player != null)
//             {
//                 int damage = Random.Range(10, 30);
//                 m_Player.TakeDamage(damage);
//                 LogTransition("测试", $"对玩家造成 {damage} 点伤害");
//                 
//                 Debug.Log($"测试伤害: {damage}");
//             }
//         }
//         
//         /// <summary>
//         /// 测试治疗功能
//         /// </summary>
//         private void TestHeal()
//         {
//             if (m_Player != null)
//             {
//                 int healAmount = Random.Range(20, 40);
//                 m_Player.Heal(healAmount);
//                 LogTransition("测试", $"治疗玩家 {healAmount} 点生命值");
//                 
//                 Debug.Log($"测试治疗: {healAmount}");
//             }
//         }
//         
//         /// <summary>
//         /// 测试死亡功能
//         /// </summary>
//         private void TestKill()
//         {
//             if (m_Player != null)
//             {
//                 m_Player.TakeDamage(m_Player.GetCurrentHealth());
//                 LogTransition("测试", "强制玩家死亡");
//                 
//                 Debug.Log("测试死亡");
//             }
//         }
//         
//         /// <summary>
//         /// 显示状态机配置
//         /// </summary>
//         private void ShowFSMConfiguration()
//         {
//             if (m_FsmConfig != null)
//             {
//                 string configInfo = m_FsmConfig.GetTransitionRulesDescription();
//                 string statistics = m_FsmConfig.GetTransitionStatistics();
//                 
//                 string fullInfo = configInfo + "\n\n" + statistics;
//                 
//                 Debug.Log("=== 状态机配置信息 ===\n" + fullInfo);
//                 LogTransition("配置", "显示状态机配置信息");
//                 
//                 // 在UI中显示配置信息
//                 if (m_TransitionLogText != null)
//                 {
//                     m_TransitionLogText.text = fullInfo;
//                 }
//             }
//         }
//         
//         /// <summary>
//         /// 记录状态转换日志
//         /// </summary>
//         public void LogTransition(string source, string message)
//         {
//             string timestamp = Time.time.ToString("F2");
//             string logEntry = $"[{timestamp}] {source}: {message}";
//             
//             m_TransitionLog.Add(logEntry);
//             
//             // 限制日志条目数量
//             while (m_TransitionLog.Count > m_MaxLogEntries)
//             {
//                 m_TransitionLog.RemoveAt(0);
//             }
//             
//             // 滚动到底部
//             if (m_LogScrollRect != null)
//             {
//                 Canvas.ForceUpdateCanvases();
//                 m_LogScrollRect.verticalNormalizedPosition = 0f;
//             }
//             
//             if (m_ShowDetailedLogs)
//             {
//                 Debug.Log(logEntry);
//             }
//         }
//         
//         /// <summary>
//         /// 清空日志
//         /// </summary>
//         public void ClearLog()
//         {
//             m_TransitionLog.Clear();
//             if (m_TransitionLogText != null)
//             {
//                 m_TransitionLogText.text = "";
//             }
//         }
//         
//         /// <summary>
//         /// 获取状态机配置
//         /// </summary>
//         public PlayerFSMConfiguration GetFSMConfiguration()
//         {
//             return m_FsmConfig;
//         }
//         
//         /// <summary>
//         /// 验证状态转换
//         /// </summary>
//         public bool ValidateStateTransition<TFromState, TToState>()
//             where TFromState : FsmState<PlayerController>
//             where TToState : FsmState<PlayerController>
//         {
//             if (m_FsmConfig != null)
//             {
//                 return m_FsmConfig.ValidateTransition<TFromState, TToState>();
//             }
//             return false;
//         }
//         
//         private void OnGUI()
//         {
//             // 简单的测试UI
//             GUILayout.BeginArea(new Rect(Screen.width - 200, 10, 190, 200));
//             GUILayout.Label("=== 状态机测试控制 ===", GUI.skin.box);
//             
//             if (GUILayout.Button("测试伤害"))
//             {
//                 TestDamage();
//             }
//             
//             if (GUILayout.Button("测试治疗"))
//             {
//                 TestHeal();
//             }
//             
//             if (GUILayout.Button("测试死亡"))
//             {
//                 TestKill();
//             }
//             
//             if (GUILayout.Button("显示配置"))
//             {
//                 ShowFSMConfiguration();
//             }
//             
//             if (GUILayout.Button("清空日志"))
//             {
//                 ClearLog();
//             }
//             
//             GUILayout.EndArea();
//         }
//     }
// }
